#ifndef PW_PBL_VALUETYPE_HPP
#define PW_PBL_VALUETYPE_HPP

#include <type_traits>

namespace pw_pbl
{
	struct AllocLayout
	{
		size_t size;
		size_t align;
	};

	template <AllocLayout LAYOUT>
	struct vtAllocLayout : public std::integral_constant<AllocLayout, LAYOUT>
	{
		static constexpr size_t ESize = LAYOUT.size;
		static constexpr size_t EAlign = LAYOUT.align;
	};

	template <size_t SIZE>
	struct vtSize : public std::integral_constant<size_t, SIZE>
	{};

	template <size_t ALIGN>
	requires(ALIGN != 0 && (ALIGN & ALIGN - 1) == 0) struct vtAlign : public std::integral_constant<size_t, ALIGN>
	{};
} // namespace pw_pbl

#endif // PW_PBL_VALUETYPE_HPP
